#include "process.h"

#define TARGET_SIZE 1024 * 1024
#define DSIZE 1024 * 10

//倒计时
void count_down()
{
    int cnt = 10;
    while(cnt)
    {
        printf("%-2d\r",cnt);
        fflush(stdout);          //刷新缓冲区
        cnt--;
        sleep(1);
    }
}

// 结合场景 v2.1
// void download()
// {
//     int target = TARGET_SIZE;
//     int total = 0;
//     while(total <= target)
//     {
//         usleep(STIME);
//         total += DSIZE;
//         process_v2(total * 100 / target);
//     }
//     printf("\n");
// }

// void download(callback_t cb)
// {
//     int target = TARGET_SIZE;
//     int total = 0;
//     while(total <= target)
//     {
//         usleep(STIME);
//         total += DSIZE;
//         int rate = total * 100 / target;
//         cb(rate);
//     }
//     printf("\n");
// }

// void download(callback_t cb)
// {
//     int target = TARGET_SIZE;
//     int total = 0;
//     while(total <= target)
//     {
//         usleep(STIME);
//         total += DSIZE;
//         double rate = total * 100.0 / target;
//         cb(rate);
//     }
//     cb(MAX_RATE);
//     printf("\n");
// }

// 模拟加载一半卡顿
void download(callback_t cb)
{
    int ret = 100;
    int target = TARGET_SIZE;
    int total = 0;
    while(total <= target)
    {
        usleep(STIME);
        total += DSIZE;
        double rate = total * 100.0 / target;
        if(rate >= 50.0 && ret)
        {
            total = target / 2;
            ret--;
        }
        cb(rate);
    }
    cb(MAX_RATE);
    printf("\n");
}

int main()
{
    // for(int i = 0; i<=100; i++)
    // {
    //     process_v2(i);
    //     usleep(STIME);
    // }
    // printf("\n");

    download(process_v3);
    
    return 0;
}